from enum import Enum

class ResultCode(Enum):
    SUCCESS = ("00000", "一切ok")

    USER_ERROR = ("A0001", "用户端错误")
    REPEAT_SUBMIT_ERROR = ("A0002", "您的请求已提交，请不要重复提交或等待片刻再尝试。")

    USER_LOGIN_ERROR = ("A0200", "用户登录异常")

    USER_NOT_EXIST = ("A0201", "用户不存在")
    USER_ACCOUNT_LOCKED = ("A0202", "用户账户被冻结")
    USER_ACCOUNT_INVALID = ("A0203", "用户账户已作废")

    USERNAME_OR_PASSWORD_ERROR = ("A0210", "用户名或密码错误")
    PASSWORD_ENTER_EXCEED_LIMIT = ("A0211", "用户输入密码次数超限")
    CLIENT_AUTHENTICATION_FAILED = ("A0212", "客户端认证失败")

    VERIFY_CODE_TIMEOUT = ("A0213", "验证码已过期")
    VERIFY_CODE_ERROR = ("A0214", "验证码错误")

    TOKEN_INVALID = ("A0230", "token无效或已过期")
    TOKEN_ACCESS_FORBIDDEN = ("A0231", "token已被禁止访问")

    AUTHORIZED_ERROR = ("A0300", "访问权限异常")
    ACCESS_UNAUTHORIZED = ("A0301", "访问未授权")
    FORBIDDEN_OPERATION = ("A0302", "演示环境禁止新增、修改和删除数据，请本地部署后测试")

    PARAM_ERROR = ("A0400", "用户请求参数错误")
    RESOURCE_NOT_FOUND = ("A0401", "请求资源不存在")
    PARAM_IS_NULL = ("A0410", "请求必填参数为空")

    USER_UPLOAD_FILE_ERROR = ("A0700", "用户上传文件异常")
    USER_UPLOAD_FILE_TYPE_NOT_MATCH = ("A0701", "用户上传文件类型不匹配")
    USER_UPLOAD_FILE_SIZE_EXCEEDS = ("A0702", "用户上传文件太大")
    USER_UPLOAD_IMAGE_SIZE_EXCEEDS = ("A0703", "用户上传图片太大")

    SYSTEM_EXECUTION_ERROR = ("B0001", "系统执行出错")
    SYSTEM_EXECUTION_TIMEOUT = ("B0100", "系统执行超时")
    SYSTEM_ORDER_PROCESSING_TIMEOUT = ("B0100", "系统订单处理超时")

    SYSTEM_DISASTER_RECOVERY_TRIGGER = ("B0200", "系统容灾功能被出发")
    FLOW_LIMITING = ("B0210", "系统限流")
    DEGRADATION = ("B0220", "系统功能降级")

    SYSTEM_RESOURCE_ERROR = ("B0300", "系统资源异常")
    SYSTEM_RESOURCE_EXHAUSTION = ("B0310", "系统资源耗尽")
    SYSTEM_RESOURCE_ACCESS_ERROR = ("B0320", "系统资源访问异常")
    SYSTEM_READ_DISK_FILE_ERROR = ("B0321", "系统读取磁盘文件失败")

    CALL_THIRD_PARTY_SERVICE_ERROR = ("C0001", "调用第三方服务出错")
    MIDDLEWARE_SERVICE_ERROR = ("C0100", "中间件服务出错")
    INTERFACE_NOT_EXIST = ("C0113", "接口不存在")

    MESSAGE_SERVICE_ERROR = ("C0120", "消息服务出错")
    MESSAGE_DELIVERY_ERROR = ("C0121", "消息投递出错")
    MESSAGE_CONSUMPTION_ERROR = ("C0122", "消息消费出错")
    MESSAGE_SUBSCRIPTION_ERROR = ("C0123", "消息订阅出错")
    MESSAGE_GROUP_NOT_FOUND = ("C0124", "消息分组未查到")

    DATABASE_ERROR = ("C0300", "数据库服务出错")
    DATABASE_TABLE_NOT_EXIST = ("C0311", "表不存在")
    DATABASE_COLUMN_NOT_EXIST = ("C0312", "列不存在")
    DATABASE_DUPLICATE_COLUMN_NAME = ("C0321", "多表关联中存在多个相同名称的列")
    DATABASE_DEADLOCK = ("C0331", "数据库死锁")
    DATABASE_PRIMARY_KEY_CONFLICT = ("C0341", "主键冲突")

    def __init__(self, code, msg):
        self.code = code
        self.msg = msg

    def __str__(self):
        return f'{{"code":"{self.code}", "msg":"{self.msg}"}}'

    @staticmethod
    def get_value(code):
        for result_code in ResultCode:
            if result_code.code == code:
                return result_code
        return ResultCode.SYSTEM_EXECUTION_ERROR  # 默认系统执行错误
